package src.main.java.tools;

public class BubbleSort {
    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        System.out.println("原始数组：");
        printArray(array);

        bubbleSort(array);

        System.out.println("排序后的数组：");
        printArray(array);
    }

    // 冒泡排序方法
    public static void bubbleSort(int[] array) {
        int n = array.length;
        boolean swapped;

        for (int i = 0; i < n - 1; i++) { // 外层循环控制排序的轮数
            swapped = false; // 用于优化冒泡排序，检测是否发生了交换
            for (int j = 0; j < n - 1 - i; j++) { // 内层循环控制每轮的比较次数
                if (array[j] > array[j + 1]) { // 如果相邻元素的前一个大于后一个，则交换它们
                    // 交换 array[j] 和 array[j + 1]
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    swapped = true; // 发生了交换，设置 swapped 为 true
                }
            }
            // 如果在一轮中没有发生任何交换，说明数组已经有序，可以提前结束排序
            if (!swapped) {
                break;
            }
        }
    }

    // 打印数组的方法
    public static void printArray(int[] array) {
        for (int value : array) {
            System.out.print(value + " ");
        }
        System.out.println();
    }
}